home *** CD-ROM | disk | FTP | other *** search
/ Deutsche Edition 1 / Deutsche Edition 1.iso / amok / 051-060 / amok52 / gadgeted / txt / requester.mod < prev    next >
Text File  |  1993-11-04  |  20KB  |  677 lines

  1. (*----------------------------------------------------------------------
  2.   :Program.    Requester.mod
  3.   :Contents.   Aufbau und Verwaltung von Requester-Windows zur Eingabe
  4.   :Contents.   diverser Daten.
  5.   :Author.     Hubert Bildstein
  6.   :Copyright.  Public Domain
  7.   :Language.   Modula-2
  8.   :Translator. M2Amiga V3.3d
  9.   :History.    V1.0   5.12.1990
  10. ----------------------------------------------------------------------*)
  11.  
  12. IMPLEMENTATION MODULE Requester;
  13. (* Aufbau von Abfrage-Windows für diverse Eingaben *)
  14.  
  15. FROM SYSTEM     IMPORT ADDRESS,ADR;
  16. FROM Arts       IMPORT TermProcedure, Assert;
  17. FROM ASCII      IMPORT nul;
  18. FROM DataStruct IMPORT BorderType;
  19. FROM Gadgets    IMPORT DefineWindow, MakeBoolGadget, GadgetText, GadgetBorder,
  20.                        MakeStrGadget, ReadStrGadget, SetStrGadget,
  21.                        PropType, PropTypeSet, MakePropGadget, ReadLongint,
  22.                        SetLongint, WaitForGadget, ReadPropGadget,
  23.                        SetPropGadget, DeleteGadget;
  24. FROM Graphics   IMPORT jam1,jam2;
  25. FROM Intuition  IMPORT WindowPtr,IDCMPFlags,IDCMPFlagSet,ScreenPtr,
  26.                        NewWindow, WindowFlags, customScreen,
  27.                        WindowFlagSet, ScreenFlags, ScreenFlagSet,
  28.                        OpenWindow, CloseWindow,
  29.                        GadgetPtr, GadgetFlagSet, GadgetFlags,
  30.                        ActivationFlagSet, ActivationFlags, ActivateGadget,
  31.                        boolGadget, strGadget, propGadget, IntuiText,
  32.                        OnGadget,OffGadget, PrintIText;
  33. FROM Menu       IMPORT SetMenu, ClearMenu;
  34.  
  35. CONST GFSet = GadgetFlagSet{};
  36.  
  37. VAR WPtr  : WindowPtr; (* glob. Var. für übergeordneten Screen u. Window *)
  38.     SPtr  : ScreenPtr;
  39.     WPtr1 : WindowPtr;   (* Requester-Fenster *)
  40.  
  41. (*--------------------------------------------------------------------------*)
  42.  
  43. PROCEDURE SetScreen (Screen : ADDRESS;
  44.                      Window : ADDRESS);
  45. (* Festlegen des Screens und des Windows, auf denen die Requester
  46.    erscheinen sollen *)
  47. BEGIN
  48.  WPtr := Window;
  49.  SPtr := Screen;
  50. END SetScreen;
  51.  
  52. (*--------------------------------------------------------------------------*)
  53.  
  54. PROCEDURE CloseAll;
  55. (* Schließen des Requester-Fensters *)
  56. BEGIN
  57.  IF (WPtr1 # NIL) THEN CloseWindow (WPtr1); WPtr1 := NIL END;
  58. END CloseAll;
  59.  
  60. (*--------------------------------------------------------------------------*)
  61.  
  62. PROCEDURE InitPropRequest (    Mode         : PropTypeSet;
  63.                            VAR WertX, WertY : LONGINT;
  64.                            VAR change       : BOOLEAN);
  65. (* Abfrage der Schrittweiten für Proportional-Gadget *)
  66.  
  67. VAR GPtr1, GPtr2, GPtr3, GP : GadgetPtr;
  68.     WDef                    : NewWindow;
  69.     class                   : IDCMPFlagSet;
  70.     ID                      : INTEGER;
  71.     ok                      : BOOLEAN;
  72.  
  73. BEGIN
  74.  
  75.  (* Menu aus *)
  76.  ClearMenu (WPtr);
  77.  
  78.  (* Abfrage-Window aufbauen *)
  79.  WITH WDef DO
  80.     leftEdge := 100; topEdge := 100; width := 400; height := 40;
  81.     detailPen := 0; blockPen := 1;
  82.     idcmpFlags := IDCMPFlagSet{gadgetUp,closeWindow};
  83.     flags := WindowFlagSet{windowDrag,windowClose,activate};
  84.     firstGadget := NIL; checkMark := NIL;
  85.     title := ADR("Proportional Gadget:");
  86.     screen := SPtr; bitMap := NIL;
  87.     type := customScreen;
  88.  END; (*WITH*)
  89.  WPtr1 := OpenWindow (WDef);
  90.  Assert (WPtr1 # NIL,ADR("Error opening Requester-Window"));
  91.  
  92.  DefineWindow (WPtr1);
  93.  
  94.  (* Gadgets einbauen *)
  95.  MakeStrGadget (GPtr1,1,280,14,50,8,6,GFSet,
  96.                 ActivationFlagSet{relVerify,longint},ok);
  97.  MakeStrGadget (GPtr2,2,280,28,50,8,6,GFSet,
  98.                 ActivationFlagSet{relVerify,longint},ok);
  99.  MakeBoolGadget (GPtr3,3,340,25,50,10,GFSet,ActivationFlagSet{relVerify},ok);
  100.  
  101.  GadgetBorder (GPtr1,-2,-2,53,11,FALSE,0,0,1);
  102.  GadgetBorder (GPtr2,-2,-2,53,11,FALSE,0,0,1);
  103.  GadgetBorder (GPtr3,-2,-2,53,13,TRUE,2,1,1);
  104.  GadgetText (GPtr1,-250,0,"Number of steps in x-direction",1,0);
  105.  GadgetText (GPtr2,-250,0,"Number of steps in y-direction",1,0);
  106.  GadgetText (GPtr3,17,1,"OK",1,0);
  107.  SetLongint (GPtr1,WertX);
  108.  SetLongint (GPtr2,WertY);
  109.  
  110.  (* evtl. nicht benutztes Gadget ausschalten *)
  111.  IF NOT (Horiz IN Mode) THEN
  112.     OffGadget (GPtr1,WPtr1,NIL)
  113.  END; (*IF*)
  114.  IF NOT (Vert IN Mode) THEN
  115.     OffGadget (GPtr2,WPtr1,NIL)
  116.  END; (*IF*)
  117.  
  118.  (* Ein Gadget aktivieren *)
  119.  IF (Horiz IN Mode) THEN
  120.      ok := ActivateGadget (GPtr1,WPtr1,NIL);
  121.  ELSE
  122.      ok := ActivateGadget (GPtr2,WPtr1,NIL);
  123.  END; (*IF*)
  124.  
  125.  REPEAT
  126.     WaitForGadget (class,ID,GP);
  127.     IF (ID = 1) AND (Vert IN Mode) THEN
  128.        ok := ActivateGadget(GPtr2,WPtr1,NIL)
  129.     END;
  130.  UNTIL (ID = 3) OR (ID = 2) OR ((ID =1) AND NOT (Vert IN Mode))
  131.        OR (closeWindow IN class);
  132.  
  133.  (* Ergebnisse *)
  134.  ReadLongint (GPtr1,WertX);
  135.  ReadLongint (GPtr2,WertY);
  136.  
  137.  IF (closeWindow IN class) THEN
  138.     change := FALSE
  139.  ELSE
  140.     change := TRUE
  141.  END; (*IF*)
  142.  
  143.  DeleteGadget (GPtr1); DeleteGadget (GPtr2); DeleteGadget (GPtr3);
  144.  CloseAll;
  145.  DefineWindow (WPtr);
  146.  SetMenu (WPtr);
  147.  
  148. END InitPropRequest;
  149.  
  150. (*--------------------------------------------------------------------------*)
  151.  
  152. PROCEDURE TextRequest (VAR Text   : ARRAY OF CHAR;
  153.                        VAR FgdCol : INTEGER;
  154.                        VAR BgdCol : INTEGER;
  155.                        VAR change : BOOLEAN;
  156.                        VAR center : BOOLEAN);
  157. (* Abfrage eines Textes mit Farben und Position *)
  158.  
  159. VAR WDef        : NewWindow;
  160.     GPtr1,GPtr2 : GadgetPtr;
  161.     GPtr3,GPtr4 : GadgetPtr;
  162.     GPtr5,GP    : GadgetPtr;
  163.     ok          : BOOLEAN;
  164.     class       : IDCMPFlagSet;
  165.     ID          : INTEGER;
  166.     f,b         : LONGINT;
  167.  
  168. BEGIN
  169.  
  170.  (* Menu aus *)
  171.   ClearMenu (WPtr);
  172.  
  173.  (* Abfrage-Window mit String-Gadget aufbauen *)
  174.   WITH WDef DO
  175.     leftEdge := 170; topEdge := 100; width := 300; height := 60;
  176.     detailPen := 0; blockPen := 1;
  177.     idcmpFlags := IDCMPFlagSet{gadgetUp,closeWindow};
  178.     flags := WindowFlagSet{windowDrag,windowClose,activate};
  179.     firstGadget := NIL; checkMark := NIL;
  180.     title := ADR("Set Gadget-Text:");
  181.     screen := SPtr; bitMap := NIL;
  182.     type := customScreen;
  183.   END; (*WITH*)
  184.   WPtr1 := OpenWindow (WDef);
  185.   Assert (WPtr1 # NIL,ADR("Error opening Requester-Window"));
  186.  
  187.   DefineWindow (WPtr1);
  188.  
  189.   (* Abfrage-Gadgets einbauen: *)
  190.   (* Text-Gadget *)
  191.   MakeStrGadget (GPtr1,1,50,15,220,8,80,GFSet,
  192.                  ActivationFlagSet{relVerify,stringCenter},ok);
  193.   GadgetBorder (GPtr1,-2,-2,223,11,FALSE,0,0,1);
  194.   GadgetText (GPtr1,-40,0,"Text",1,0);
  195.   SetStrGadget (GPtr1,Text);
  196.  
  197.   (* 1. Farb-Gagdet *)
  198.   MakeStrGadget (GPtr2,2,110,29,16,8,2,GFSet,
  199.                  ActivationFlagSet{relVerify,longint},ok);
  200.   GadgetBorder (GPtr2,-2,-2,19,11,FALSE,0,0,1);
  201.   GadgetText (GPtr2,-74,0,"frontPen",1,0);
  202.   f := LONGINT(FgdCol);
  203.   SetLongint (GPtr2,f);
  204.  
  205.   (* 2. Farb-Gagdet *)
  206.   MakeStrGadget (GPtr3,3,250,29,16,8,2,GFSet,
  207.                  ActivationFlagSet{relVerify,longint},ok);
  208.   GadgetBorder (GPtr3,-2,-2,19,11,FALSE,0,0,1);
  209.   GadgetText (GPtr3,-66,0,"backPen",1,0);
  210.   b := LONGINT(BgdCol);
  211.   SetLongint (GPtr3,b);
  212.  
  213.   (* Center-Gagdet *)
  214.   MakeBoolGadget (GPtr4,4,35,45,55,10,GFSet,
  215.                   ActivationFlagSet{relVerify},ok);
  216.   GadgetBorder (GPtr4,-2,-2,58,13,TRUE,2,1,1);
  217.   GadgetText (GPtr4,2,1,"Center",1,0);
  218.  
  219.   (* Position-Gagdet *)
  220.   MakeBoolGadget (GPtr5,5,200,45,70,10,GFSet,
  221.                   ActivationFlagSet{relVerify},ok);
  222.   GadgetBorder (GPtr5,-2,-2,73,13,TRUE,2,1,1);
  223.   GadgetText (GPtr5,3,1,"Position",1,0);
  224.  
  225.   ok := ActivateGadget (GPtr1,WPtr1,NIL);
  226.  
  227.   REPEAT   (* auf Reaktion warten *)
  228.      WaitForGadget (class,ID,GP);    (* Auf Reaktion warten *)
  229.      CASE ID OF
  230.      |  1 : ok := ActivateGadget (GPtr2,WPtr1,NIL);
  231.      |  2 : ok := ActivateGadget (GPtr3,WPtr1,NIL);
  232.      ELSE
  233.      END; (*CASE*)
  234.   UNTIL (ID = 4) OR (ID = 5) OR (closeWindow IN class);
  235.  
  236.   (* Auswertung *)
  237.   ReadStrGadget (GPtr1,Text);  (* Text auslesen *)
  238.  
  239.   ReadLongint (GPtr2,f);   (* Farben auslesen *)
  240.   ReadLongint (GPtr3,b);
  241.   FgdCol := INTEGER(f); BgdCol := INTEGER(b);
  242.  
  243.   IF (closeWindow IN class) THEN   (* = CANCEL *)
  244.      change := FALSE;
  245.   ELSIF (ID = 4) THEN
  246.      change := TRUE; center := TRUE;
  247.   ELSE
  248.      change := TRUE; center := FALSE;
  249.   END; (*IF*)
  250.  
  251.   DeleteGadget (GPtr1); DeleteGadget (GPtr2); DeleteGadget (GPtr3);
  252.   DeleteGadget (GPtr4); DeleteGadget (GPtr5);
  253.   CloseAll;          (* Eingabe beendet *)
  254.   DefineWindow (WPtr);
  255.   SetMenu (WPtr);
  256.  
  257. END TextRequest;
  258.  
  259. (*--------------------------------------------------------------------------*)
  260.  
  261. PROCEDURE StrAttrRequest (VAR maxChars : INTEGER;
  262.                           VAR AFlags   : ActivationFlagSet;
  263.                           VAR Borders  : BorderType;
  264.                           VAR change   : BOOLEAN);
  265. (* Abfrage neuer String-Gadget-Attribute *)
  266.  
  267. VAR WDef  : NewWindow;
  268.     GPtr1, GPtr2 : GadgetPtr;
  269.     GPtr3, GPtr4 : GadgetPtr;
  270.     GPtr5, GP    : GadgetPtr;
  271.     IText : IntuiText;
  272.     class : IDCMPFlagSet;
  273.     ID : INTEGER;
  274.     ok : BOOLEAN;
  275.     xVal, yVal : CARDINAL;
  276.     Wert : LONGINT;
  277.  
  278. BEGIN
  279.  
  280.  (* Menu aus *)
  281.   ClearMenu (WPtr);
  282.  
  283.  (* Abfrage-Window aufbauen *)
  284.   WITH WDef DO
  285.     leftEdge := 170; topEdge := 100; width := 300; height := 95;
  286.     detailPen := 0; blockPen := 1;
  287.     idcmpFlags := IDCMPFlagSet{gadgetUp,closeWindow};
  288.     flags := WindowFlagSet{windowDrag,windowClose,activate};
  289.     firstGadget := NIL; checkMark := NIL;
  290.     title := ADR("Modify String-Gadget:");
  291.     screen := SPtr; bitMap := NIL;
  292.     type := customScreen;
  293.   END; (*WITH*)
  294.   WPtr1 := OpenWindow (WDef);
  295.   Assert (WPtr1 # NIL,ADR("Error opening Requester-Window"));
  296.  
  297.   DefineWindow (WPtr1);
  298.  
  299.  (* Gadgets einbauen *)
  300.  (* TextLength-Gadget *)
  301.   MakeStrGadget (GPtr1,1,150,15,32,8,3,GFSet,
  302.                  ActivationFlagSet{longint},ok);
  303.   GadgetBorder (GPtr1,-2,-2,35,11,FALSE,0,0,1);
  304.   GadgetText (GPtr1,-128,0,"Max. Textlength",1,0);
  305.   SetLongint (GPtr1,LONGINT(maxChars));
  306.  
  307.  (* String/Longint-Gadget *)
  308.   MakeBoolGadget (GPtr2,2,150,30,40,8,GFSet,
  309.                   ActivationFlagSet{relVerify},ok);
  310.   GadgetBorder (GPtr2,-2,-2,43,11,FALSE,0,0,1);
  311.   IF (longint IN AFlags) THEN
  312.      GadgetText (GPtr2,50,1,"Longint",1,0);
  313.   ELSE
  314.      GadgetText (GPtr2,50,1,"String ",1,0);
  315.   END; (*IF*)
  316.   WITH IText DO
  317.     frontPen := 1; backPen := 0; drawMode := jam2;
  318.     leftEdge := 0; topEdge := 0; iTextFont := NIL;
  319.     iText := ADR("Type of Gadget:"); nextText := NIL;
  320.   END; (*WITH*)
  321.   PrintIText (WPtr1^.rPort,ADR(IText),20,30);
  322.  
  323.  (* String-Ausrichtungs-Gadget *)
  324.   MakePropGadget (GPtr3,3,100,45,80,10,ActivationFlagSet{relVerify},
  325.                   PropTypeSet{Horiz},3,0,ok);
  326.   GadgetText (GPtr3,-80,2,"Alignment",1,0);
  327.   IF (stringCenter IN AFlags) THEN
  328.      SetPropGadget(GPtr3,1,0);
  329.   ELSIF (stringRight IN AFlags) THEN
  330.      SetPropGadget(GPtr3,2,0);
  331.   ELSE
  332.      SetPropGadget(GPtr3,0,0);
  333.   END; (*IF*)
  334.   WITH IText DO
  335.     frontPen := 1; backPen := 0; drawMode := jam2;
  336.     leftEdge := 0; topEdge := 0; iTextFont := NIL;
  337.     iText := ADR(" Le Ce Ri "); nextText := NIL;
  338.   END; (*WITH*)
  339.   PrintIText (WPtr1^.rPort,ADR(IText),100,57);
  340.  
  341.  (* Rahmen-Gadget *)
  342.   MakePropGadget (GPtr4,4,100,70,80,10,ActivationFlagSet{relVerify},
  343.                   PropTypeSet{Horiz},3,0,ok);
  344.   GadgetText (GPtr4,-80,2,"Border",1,0);
  345.   IF (Borders = Single) THEN
  346.      SetPropGadget(GPtr4,1,0);
  347.   ELSIF (Borders = Double) THEN
  348.      SetPropGadget(GPtr4,2,0);
  349.   ELSE
  350.      SetPropGadget(GPtr4,0,0);
  351.   END; (*IF*)
  352.   WITH IText DO
  353.     frontPen := 1; backPen := 0; drawMode := jam2;
  354.     leftEdge := 0; topEdge := 0; iTextFont := NIL;
  355.     iText := ADR(" No Si Do "); nextText := NIL;
  356.   END; (*WITH*)
  357.   PrintIText (WPtr1^.rPort,ADR(IText),100,82);
  358.  
  359.  (* OK-Gadget *)
  360.   MakeBoolGadget (GPtr5,5,230,75,50,10,GFSet,
  361.                   ActivationFlagSet{relVerify},ok);
  362.   GadgetText (GPtr5,17,1,"OK",1,0);
  363.   GadgetBorder (GPtr5,-2,-2,53,13,TRUE,2,1,1);
  364.  
  365.  
  366.  (* Warten auf Meldungen *)
  367.   REPEAT
  368.     WaitForGadget (class,ID,GP);
  369.     IF (ID = 2) THEN   (* String/Longint *)
  370.        IF (longint IN AFlags) THEN
  371.            EXCL (AFlags,longint);
  372.            GadgetText (GPtr2,50,1,"String ",1,0);
  373.        ELSE
  374.            INCL (AFlags,longint);
  375.            GadgetText (GPtr2,50,1,"Longint",1,0);
  376.        END; (*IF*)
  377.     ELSIF (ID = 3) OR (ID = 4) THEN
  378.        ReadPropGadget (GP,xVal,yVal);
  379.        SetPropGadget (GP,xVal,yVal);
  380.     END; (*IF*)
  381.   UNTIL (ID = 5) OR (closeWindow IN class);
  382.  
  383.   IF (closeWindow IN class) THEN
  384.      change := FALSE
  385.   ELSE
  386.      ReadLongint (GPtr1,Wert); maxChars := INTEGER(Wert);
  387.  
  388.      ReadPropGadget (GPtr3,xVal,yVal);
  389.      IF (xVal = 0) THEN
  390.         EXCL (AFlags,stringCenter);
  391.         EXCL (AFlags,stringRight);
  392.      ELSIF (xVal = 1) THEN
  393.         INCL (AFlags,stringCenter);
  394.         EXCL (AFlags,stringRight);
  395.      ELSE
  396.         EXCL (AFlags,stringCenter);
  397.         INCL (AFlags,stringRight);
  398.      END; (*IF*)
  399.  
  400.      ReadPropGadget (GPtr4,xVal,yVal);
  401.      IF (xVal = 0) THEN
  402.         Borders := No;
  403.      ELSIF (xVal = 1) THEN
  404.         Borders := Single;
  405.      ELSE
  406.         Borders := Double;
  407.      END; (*IF*)
  408.  
  409.      change := TRUE;
  410.   END; (*IF*)
  411.  
  412.   DeleteGadget (GPtr1); DeleteGadget (GPtr2); DeleteGadget (GPtr3);
  413.   DeleteGadget (GPtr4); DeleteGadget (GPtr5);
  414.   CloseAll;
  415.   DefineWindow (WPtr);
  416.   SetMenu (WPtr);
  417.  
  418. END StrAttrRequest;
  419.  
  420. (*--------------------------------------------------------------------------*)
  421.  
  422. PROCEDURE BoolAttrRequest (VAR AFlags  : ActivationFlagSet;
  423.                            VAR Borders : BorderType;
  424.                            VAR change  : BOOLEAN);
  425. (* Abfrage neuer Boolean-Gadget-Attribute *)
  426.  
  427. VAR WDef         : NewWindow;
  428.     GPtr1, GPtr2 : GadgetPtr;
  429.     GPtr3, GP    : GadgetPtr;
  430.     IText        : IntuiText;
  431.     ok           : BOOLEAN;
  432.     class        : IDCMPFlagSet;
  433.     ID           : INTEGER;
  434.     xVal,yVal    : CARDINAL;
  435.  
  436. BEGIN
  437.  
  438.  (* Menu aus *)
  439.   ClearMenu (WPtr);
  440.  
  441.  (* Abfrage-Window aufbauen *)
  442.   WITH WDef DO
  443.     leftEdge := 170; topEdge := 100; width := 300; height := 70;
  444.     detailPen := 0; blockPen := 1;
  445.     idcmpFlags := IDCMPFlagSet{gadgetUp,closeWindow};
  446.     flags := WindowFlagSet{windowDrag,windowClose,activate};
  447.     firstGadget := NIL; checkMark := NIL;
  448.     title := ADR("Modify Boolean-Gadget:");
  449.     screen := SPtr; bitMap := NIL;
  450.     type := customScreen;
  451.   END; (*WITH*)
  452.   WPtr1 := OpenWindow (WDef);
  453.   Assert (WPtr1 # NIL,ADR("Error opening Requester-Window"));
  454.  
  455.   DefineWindow (WPtr1);
  456.  
  457.  (* Gadgets einbauen *)
  458.  (* Normal/ToggleSelect - Gadget *)
  459.   MakeBoolGadget (GPtr1,1,150,15,40,15,GFSet,
  460.                   ActivationFlagSet{relVerify},ok);
  461.   GadgetBorder (GPtr1,-2,-2,43,18,FALSE,0,0,1);
  462.   IF (toggleSelect IN AFlags) THEN
  463.      GadgetText (GPtr1,50,5,"ToggleSelect",1,0);
  464.   ELSE
  465.      GadgetText (GPtr1,50,5,"Normal      ",1,0);
  466.   END; (*IF*)
  467.   WITH IText DO
  468.     frontPen := 1; backPen := 0; drawMode := jam2;
  469.     leftEdge := 0; topEdge := 0; iTextFont := NIL;
  470.     iText := ADR("Type of Gadget:"); nextText := NIL;
  471.   END; (*WITH*)
  472.   PrintIText (WPtr1^.rPort,ADR(IText),20,20);
  473.  
  474.  (* Border-Gadget *)
  475.   MakePropGadget (GPtr2,2,80,40,80,10,ActivationFlagSet{relVerify},
  476.                   PropTypeSet{Horiz},3,0,ok);
  477.   GadgetText (GPtr2,-60,2,"Border:",1,0);
  478.   IF (Borders = Single) THEN
  479.      SetPropGadget(GPtr2,1,0);
  480.   ELSIF (Borders = Double) THEN
  481.      SetPropGadget(GPtr2,2,0);
  482.   ELSE
  483.      SetPropGadget(GPtr2,0,0);
  484.   END; (*IF*)
  485.  (* Text darstellen *)
  486.   WITH IText DO
  487.     frontPen := 1; backPen := 0; drawMode := jam2;
  488.     leftEdge := 0; topEdge := 0; iTextFont := NIL;
  489.     iText := ADR(" No Si Do "); nextText := NIL;
  490.   END; (*WITH*)
  491.   PrintIText (WPtr1^.rPort,ADR(IText),80,52);
  492.  
  493.  (* OK-Gadget *)
  494.   MakeBoolGadget (GPtr3,3,230,50,50,10,GFSet,
  495.                   ActivationFlagSet{relVerify},ok);
  496.   GadgetText (GPtr3,17,1,"OK",1,0);
  497.   GadgetBorder (GPtr3,-2,-2,53,13,TRUE,2,1,1);
  498.  
  499.  
  500.   REPEAT
  501.      WaitForGadget (class, ID, GP);
  502.      IF (ID = 1) THEN
  503.         IF (toggleSelect IN AFlags) THEN
  504.            EXCL (AFlags,toggleSelect);
  505.            GadgetText (GPtr1,50,5,"Normal      ",1,0);
  506.         ELSE
  507.            INCL (AFlags,toggleSelect);
  508.            GadgetText (GPtr1,50,5,"ToggleSelect",1,0);
  509.         END; (*IF*)
  510.      ELSIF (ID = 2) THEN
  511.         ReadPropGadget (GP,xVal,yVal);
  512.         SetPropGadget (GP,xVal,yVal);
  513.      END; (*IF*)
  514.   UNTIL (ID = 3) OR (closeWindow IN class);
  515.  
  516.  
  517.   IF (closeWindow IN class) THEN
  518.      change := FALSE
  519.   ELSE
  520.      ReadPropGadget (GPtr2,xVal,yVal);
  521.      IF (xVal = 0) THEN
  522.         Borders := No;
  523.      ELSIF (xVal = 1) THEN
  524.         Borders := Single;
  525.      ELSE
  526.         Borders := Double;
  527.      END; (*IF*)
  528.  
  529.      change := TRUE;
  530.   END; (*IF*)
  531.  
  532.   DeleteGadget (GPtr1); DeleteGadget (GPtr2); DeleteGadget (GPtr3);
  533.   CloseAll;
  534.   DefineWindow (WPtr);
  535.   SetMenu (WPtr);
  536.  
  537. END BoolAttrRequest;
  538.  
  539. (*--------------------------------------------------------------------------*)
  540.  
  541. PROCEDURE FileNameRequest (VAR Filename : ARRAY OF CHAR;
  542.                            VAR change   : BOOLEAN);
  543. (* Abfragen eines Filenamens *)
  544.  
  545. VAR WDef      : NewWindow;
  546.     GPtr, GP  : GadgetPtr;
  547.     ok        : BOOLEAN;
  548.     class     : IDCMPFlagSet;
  549.     ID        : INTEGER;
  550.  
  551. BEGIN
  552.  
  553. (* Menu aus *)
  554.   ClearMenu (WPtr);
  555.  
  556. (* Abfrage-Window mit String-Gadget aufbauen *)
  557.   WITH WDef DO
  558.     leftEdge := 170; topEdge := 100; width := 315; height := 30;
  559.     detailPen := 0; blockPen := 1;
  560.     idcmpFlags := IDCMPFlagSet{gadgetUp,closeWindow};
  561.     flags := WindowFlagSet{windowDrag,windowClose,activate};
  562.     firstGadget := NIL; checkMark := NIL;
  563.     title := ADR("Enter Modulename without Extension");
  564.     screen := SPtr; bitMap := NIL;
  565.     type := customScreen;
  566.   END; (*WITH*)
  567.   WPtr1 := OpenWindow (WDef);
  568.   DefineWindow (WPtr1);
  569.   Assert (WPtr1 # NIL,ADR("Error opening Requester-Window"));
  570.  
  571.   (* Abfrage-Gadgets einbauen: *)
  572.   (* Text-Gadget *)
  573.   MakeStrGadget (GPtr,1,80,15,200,8,80,GFSet,
  574.                  ActivationFlagSet{relVerify},ok);
  575.   GadgetBorder (GPtr,-2,-2,203,11,FALSE,0,0,1);
  576.   GadgetText (GPtr,-70,0,"Filename",1,0);
  577.   SetStrGadget (GPtr,Filename);
  578.  
  579.   ok := ActivateGadget (GPtr,WPtr1,NIL);
  580.  
  581.   REPEAT
  582.     WaitForGadget (class,ID,GP);
  583.   UNTIL (ID = 1) OR (closeWindow IN class);
  584.  
  585.   IF (ID = 1) THEN
  586.      ReadStrGadget (GPtr,Filename);  (* Text auslesen *)
  587.      change := TRUE
  588.   ELSE
  589.      change := FALSE
  590.   END;
  591.  
  592.   DeleteGadget (GPtr);
  593.   CloseAll;
  594.   DefineWindow (WPtr);
  595.   SetMenu (WPtr);
  596.  
  597.  END FileNameRequest;
  598.  
  599. (*--------------------------------------------------------------------------*)
  600.  
  601. PROCEDURE Request (Text : ADDRESS) : BOOLEAN;
  602. (* Allgemeiner Requester für OK/CANCEL-Abfrage.
  603.    Text : darzustellender Text
  604.    Ergebnis: TRUE - OK; FALSE - CANCEL
  605. *)
  606.  
  607. VAR WDef      : NewWindow;
  608.     IText     : IntuiText;
  609.     GPtr1     : GadgetPtr;
  610.     GPtr2, GP : GadgetPtr;
  611.     ok        : BOOLEAN;
  612.     class     : IDCMPFlagSet;
  613.     ID        : INTEGER;
  614.  
  615. BEGIN
  616.  
  617. (* Menu aus *)
  618.   ClearMenu (WPtr);
  619.  
  620. (* Abfrage-Window mit String-Gadget aufbauen *)
  621.   WITH WDef DO
  622.     leftEdge := 170; topEdge := 100; width := 320; height := 40;
  623.     detailPen := 0; blockPen := 1;
  624.     idcmpFlags := IDCMPFlagSet{gadgetUp,closeWindow};
  625.     flags := WindowFlagSet{windowDrag,windowClose,activate};
  626.     firstGadget := NIL; checkMark := NIL;
  627.     title := ADR("GadgetEd");
  628.     screen := SPtr; bitMap := NIL;
  629.     type := customScreen;
  630.   END; (*WITH*)
  631.   WPtr1 := OpenWindow (WDef);
  632.   DefineWindow (WPtr1);
  633.   Assert (WPtr1 # NIL,ADR("Error opening Requester-Window"));
  634.  
  635.  (* Abfrage-Gadgets einbauen: *)
  636.  (* OK-Gadget *)
  637.   MakeBoolGadget (GPtr1,1,30,25,60,9,GFSet,
  638.                   ActivationFlagSet{relVerify},ok);
  639.   GadgetText (GPtr1,22,1,"OK",1,0);
  640.   GadgetBorder (GPtr1,-2,-2,63,12,TRUE,2,1,1);
  641.  
  642.  (* CANCEL-Gadget *)
  643.   MakeBoolGadget (GPtr2,2,230,25,60,9,GFSet,
  644.                   ActivationFlagSet{relVerify},ok);
  645.   GadgetText (GPtr2,6,1,"CANCEL",1,0);
  646.   GadgetBorder (GPtr2,-2,-2,63,12,TRUE,2,1,1);
  647.  
  648.  (* Text darstellen *)
  649.   WITH IText DO
  650.     frontPen := 1; backPen := 0; drawMode := jam2;
  651.     leftEdge := 0; topEdge := 0; iTextFont := NIL;
  652.     iText := Text; nextText := NIL;
  653.   END; (*WITH*)
  654.   PrintIText (WPtr1^.rPort,ADR(IText),10,11);
  655.  
  656.   WaitForGadget (class,ID,GP);
  657.  
  658.   DeleteGadget (GPtr1); DeleteGadget (GPtr2);
  659.   CloseAll;
  660.   DefineWindow (WPtr);
  661.   SetMenu (WPtr);
  662.  
  663.   IF (ID = 1) THEN
  664.      RETURN TRUE
  665.   ELSE
  666.      RETURN FALSE
  667.   END;
  668.  
  669. END Request;
  670.  
  671. (*--------------------------------------------------------------------------*)
  672.  
  673. BEGIN
  674.  TermProcedure (CloseAll);        (* für Fehlerfall *)
  675.  WPtr1 := NIL;
  676. END Requester.
  677.